package com.situ.mall.web.controller;

import com.mall.common.util.JsonResult;
import com.mall.user.model.vo.LoginUserVO;
import com.situ.mall.web.service.CartFeignService;
import com.situ.mall.web.service.NotificationFeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

/**
 * 全局数据控制器 - 提供页面公共数据
 */
@Slf4j
@RestController
@RequestMapping("/api/global")
public class GlobalDataController {

    @Autowired
    private NotificationFeignService notificationFeignService;
    
    @Autowired
    private CartFeignService cartFeignService;

    /**
     * 获取用户通知和购物车数量（用于页面头部显示）
     */
    @GetMapping("/header-info")
    public JsonResult<?> getHeaderInfo(HttpServletRequest request) {
        Map<String, Object> headerInfo = new HashMap<>();
        
        try {
            LoginUserVO currentUser = getCurrentUser(request);
            if (currentUser != null) {
                headerInfo.put("isLoggedIn", true);
                headerInfo.put("userName", currentUser.getUsername());
                headerInfo.put("userType", currentUser.getUserType());
                
                // 获取未读通知数量
                try {
                    ResponseEntity<JsonResult<?>> notificationsResult = notificationFeignService.getUserNotifications(
                        1, 1, currentUser.getId().intValue());
                    // 这里简化处理，实际应该有专门的未读数量API
                    headerInfo.put("unreadNotifications", 3); // 模拟数据
                } catch (Exception e) {
                    log.warn("获取通知数量失败", e);
                    headerInfo.put("unreadNotifications", 0);
                }
                
                // 获取购物车商品数量
                try {
                    ResponseEntity<JsonResult<?>> cartResult = cartFeignService.findAll(currentUser.getId().intValue());
                    if (cartResult.getBody() != null && cartResult.getBody().getData() != null) {
                        @SuppressWarnings("unchecked")
                        java.util.List<?> cartItems = (java.util.List<?>) cartResult.getBody().getData();
                        headerInfo.put("cartItemCount", cartItems.size());
                    } else {
                        headerInfo.put("cartItemCount", 0);
                    }
                } catch (Exception e) {
                    log.warn("获取购物车数量失败", e);
                    headerInfo.put("cartItemCount", 0);
                }
                
            } else {
                headerInfo.put("isLoggedIn", false);
                headerInfo.put("unreadNotifications", 0);
                headerInfo.put("cartItemCount", 0);
            }
            
            return JsonResult.success(headerInfo);
            
        } catch (Exception e) {
            log.error("获取页面头部信息失败", e);
            headerInfo.put("isLoggedIn", false);
            headerInfo.put("unreadNotifications", 0);
            headerInfo.put("cartItemCount", 0);
            return JsonResult.success(headerInfo);
        }
    }

    /**
     * 获取网站统计信息（用于首页展示）
     */
    @GetMapping("/site-stats")
    public JsonResult<?> getSiteStats() {
        Map<String, Object> stats = new HashMap<>();
        
        try {
            // 这里可以调用各个微服务获取统计数据
            // 暂时返回模拟数据
            stats.put("totalProducts", 10000);      // 总商品数
            stats.put("totalUsers", 50000);         // 总用户数
            stats.put("totalOrders", 100000);       // 总订单数
            stats.put("onlineUsers", 1234);         // 在线用户数
            
            return JsonResult.success(stats);
            
        } catch (Exception e) {
            log.error("获取网站统计信息失败", e);
            return JsonResult.fail("获取统计信息失败");
        }
    }

    /**
     * 获取热门搜索关键词
     */
    @GetMapping("/hot-keywords")
    public JsonResult<?> getHotKeywords() {
        try {
            // 这里应该从搜索记录中统计，暂时返回固定数据
            java.util.List<String> keywords = java.util.List.of(
                "手机", "电脑", "耳机", "数码相机", "平板电脑", 
                "智能手表", "蓝牙音箱", "游戏机", "键盘", "鼠标"
            );
            
            return JsonResult.success(keywords);
            
        } catch (Exception e) {
            log.error("获取热门搜索关键词失败", e);
            return JsonResult.success(java.util.Collections.emptyList());
        }
    }

    /**
     * 从Session中获取当前用户
     */
    private LoginUserVO getCurrentUser(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            Object userInfo = session.getAttribute("currentUser");
            if (userInfo instanceof LoginUserVO) {
                return (LoginUserVO) userInfo;
            }
        }
        return null;
    }
} 